Device drivers are specialized computer programs that carry out input/output (I/O) operations initiated by application programs in a computer. Many device drivers are specific to particular I/O devices or classes of I/O devices, such as disk drives for example. Other device drivers may operate at a more abstract level. For example, device driver may be used to control and access a logical unit of storage that is made available for use by application programs and that utilizes real physical storage device(s) for underlying real physical storage capacity, where such physical storage devices also have respective device drivers. Many drivers, including those operating at more abstract levels, may be organized to selectively include modularized components that provide enhanced functionality over basis driver operation. In the context of drivers for storage devices or logical volumes, such modularized components can include components for performing data compression or data de-duplication for example.
There is a general need for application programs to exert direct control over the operation of device drivers and/or underlying logical or physical devices. It is known to use so-called “input-output control” or IOCTL commands in computers to support such control actions. More generally, there can be need for other types of components, including kernel components such as other drivers, to communicate with a driver. A component can generate an IOCTL command and cause the operating system to issue it to a device driver, where the IOCTL command is interpreted and causes the device driver to perform a corresponding action. Over time, existing operating systems have come to support a large library of IOCTL commands used by the various applications/components and devices that are supported.